package polybook.model;

import java.io.IOException;
import java.util.ArrayList;
import java.util.Random;
import polybook.utils.DatasFileUtils;
import polybook.utils.RandomUtils;

/**
 * Classe Hobbies correspondant aux centre d'interet d'un individu
 *
 * @author epulapp
 */
public class Hobbies {

    /**
     * Dictionnaire de hobbies. Sert de cache pour ne pas avoir à recharger le
     * fichier à chaque création d'objet Hobbies.
     */
    protected static ArrayList<String> dicHobbies;

    /**
     * Constructeur principal de la classe Hobbies, génere une liste de centre
     * d'interet à partir du fichier "DatasFiles/hobbies.properties"
     *
     * @param size Nombre de centres d'interet
     */
    public Hobbies(int size, boolean useDictionnary) throws IOException, IllegalArgumentException {
        this.container = new ArrayList<String>();
        if (useDictionnary) {
            // Si le dictionnaire n'a pas encore été chargé on le charge
            if (dicHobbies == null) {
                dicHobbies = new ArrayList<String>(DatasFileUtils.load("DatasFiles/hobbies.properties"));
            }
            
            // On initialise l'objet Random pour les index dans le dico
            Random randomObject = new Random();
            this.container = new ArrayList<String>(size);
            // Puis on entre une a une les valeurs dans le container
            int i = 0;
            while(i < size) {
                // Index aleatoire sur le dico
                int dicIndex = randomObject.nextInt(dicHobbies.size());
                
                if(dicHobbies.size() < size) {
                    this.container.add(dicHobbies.get(dicIndex));
                    i++;
                } else if(!container.contains(dicHobbies.get(dicIndex))) {
                    this.container.add(dicHobbies.get(dicIndex));
                    i++;
                }
            }
        } else {
            // Sans dictionnaire, on utilise des chaines aleatoires
            for (int i = 0; i < size; i++) {
                this.container.add(RandomUtils.generateString(5, 10, false));
            }
        }
    }
    /**
     * Liste des centres d'interet
     */
    protected ArrayList<String> container;

    /**
     * Getter pour la liste des centres d'interêt
     *
     * @return La liste des centres d'interet
     */
    public ArrayList<String> getContainer() {
        return container;
    }

    /**
     * Setter pour la liste de centre d'interêt
     *
     * @param list La liste des centres d'interet
     */
    public void setContainer(ArrayList<String> list) {
        this.container = list;
    }
}
